Context-sensitive musical performances have become essential components of electronic and multimedia products such as stand-alone video games, computer based video games, computer based slide show presentations, computer animation, and other similar products and applications. As a result, music generating devices and/or music playback devices have been more highly integrated into electronic and multimedia products. Previously, musical accompaniment for multimedia products was provided in the form of pre-recorded music that could be retrieved and performed under various circumstances.
Using pre-recorded music for providing context-sensitive musical performances has several disadvantages. One disadvantage is that the pre-recorded music requires a substantial amount of memory storage. Another disadvantage is that the variety of music that can be provided using this approach is limited by the amount of available memory. The musical accompaniment for multimedia devices utilizing this approach is wasteful of memory resources and can be very repetitious.
Today, music generating devices are directly integrated into electronic and multimedia products for composing and providing context-sensitive, musical performances. These musical performances can be dynamically generated in response to various input parameters, real-time events, and conditions. For instance, in a graphically based adventure game, the background music can change from a happy, upbeat sound to a dark, eerie sound in response to a user entering into a cave, a basement, or some other generally mystical area. Thus, a user can experience the sensation of live musical accompaniment as he engages in a multimedia experience.
One way of accomplishing this is to define musical performances as combinations of chord progressions and note sequences, so that notes are calculated during a performance as a function of both a chord progression and a note sequence.
A chord progression defines a time sequence of chords. An individual chord is defined as a plurality of notes, relative to an absolute music scale.
A note sequence defines a time sequence of individual notes. The notes of a note sequence, however, are not defined in terms of the absolute music scale. Rather, the notes are defined by their positions within underlying chords. As a simple example, a note might be defined as the second note of a chord. This note would then vary depending on the particular chord with which the note was played. The second note of a C chord is E, so an E is played when the note is interpreted in conjunction with a C chord. The second note of a G chord is B, so a B is played when the note is interpreted in conjunction with a G chord. Interpreting a chord in this manner is referred to as playing the note "against" a specified chord. The result of this is that the notes of a musical track are transposed or mapped to different pitches when played against different chords.
To generate actual output notes based on a chord progression and a note sequence, the notes of the note sequence are played against the chords of the chord progression. The chords of the progression have associated timing, so that any given note from the note sequence is matched with a particular chord of the progression. When the note is played, it is played against a corresponding chord of the progression. This scheme allows a musical performance to be varied in subtle ways, by changing either the chord progression or the note sequence as the performance progresses.
Prior art music generation systems enhanced this scheme by grouping note sequences into so-called "styles," also referred to herein as "sequence styles." A sequence style was a set of related note sequences, also referred to herein as patterns or note patterns, that provided similar sounds. Typically, a style had one or more patterns corresponding to different embellishments such as intros, primary repeating themes, and endings. A style also included patterns having different intensity levels (often referred to as "groove" levels), used to portray the same basic music theme at different levels of intensity. Generally, intensity relates to number of notes played per unit of time--the greater the number of notes played, the greater the intensity. Within a sequence style, the patterns were organized by the type of embellishments they represented and by their intensity levels. In other words, a particular pattern was selected by specifying the type of embellishment and the intensity level at which the embellishment was to be rendered. Each pattern was assigned a discrete intensity level ranging from "A" to "D." Intensity level "A" was considered to be the least intense pattern within an embellishment category and intensity level D was considered to be the most intense.
As a further enhancement in the prior art, several note patterns were provided for a given embellishment type and intensity level, each designed to support a particular rhythm of chord changes. Three discrete flags were used to indicate the rhythm supported by any particular style pattern. One flag indicated that the pattern was designed to allow or accommodate chord changes only at the beginning of a measure. Another flag indicated that the note sequence was designed to accommodate chord changes on every beat. Another flag indicated that the pattern was designed to accommodate chord changes at every half-measure. Any combination of these flags could be set for a particular pattern.
FIG. 1 illustrates a sequence style 10 that contains a plurality of patterns 11 in accordance with the prior art. Each pattern includes a designation of an embellishment type. Each pattern also indicates its intensity level--in this case either level A, level B, or level C. Finally, each pattern indicates the type of chord rhythm allowed by the pattern. An "m" flag indicates that the pattern can accommodate chord changes at the first beat of every measure. An "h" flag indicates that the pattern can accommodate chord changes at every half-measure. A "b" flag indicates that the pattern can accommodate chord changes on every beat of a measure. Although not shown, any combination of the m, h, and b flags can be set for any particular pattern.
The availability of styles, with different embellishments and intensity levels within each style, allowed an application program to determine music characteristics at a relatively high level. The application first specified a chord progression and a sequence style to a performance engine. The application then selected an embellishment type and intensity level. Typically, the intensity level would be changed dynamically in response to user stimuli. For example, a relatively higher intensity level would be selected when the user entered a dangerous portion of an interactive game.
The performance engine was responsible for selecting the proper note patterns from the sequence style specified by the application program, and for playing the note sequence of the selected pattern against the currently-selected chord progression. In order to select the proper pattern the performance engine analyzed the selected chord progression to determine the rhythm of chord changes. The performance engine then selected a note pattern whose rhythm flags indicated compatibility with the rhythm of the chord progression. If chord changes occurred only at the beginnings of measures, the performance engine would select one of the patterns whose flags indicated that it could accommodate changes at measure intervals. If chord changes occurred at half-measure intervals, the performance engine would select a pattern whose flags indicated that it could accommodate changes at half-measure intervals. If chord changes occurred at any other beats, the performance engine would select a pattern whose flags indicated that it could accommodate changes at any beat. In the case where more than one note sequence might be used with a particular chord progression, the performance engine would select one of the qualifying patterns, giving priority first to any pattern supporting changes at measure intervals, then to any pattern supporting changes at half-measure intervals, and then to any remaining pattern supporting changes at beat intervals. If more than one pattern qualified for the highest priority, the first of such patterns would be selected, or one of such patterns would be selected at random.
A system such as described above is disclosed in U.S. Pat. No. 5,753,843, entitled "System and Process for Composing Musical Sections," which issued to Microsoft Corporation on May 19, 1998. Although this system worked well, it was found to be overly restrictive in the way rhythms and intensity levels were used. One problem was the rigid definition of four different intensity levels. This was found to be too restrictive in some situations. Another problem was that the available "m", "h", and "b" flags accounted for only a limited subset of possible rhythm patterns. For example, these flags did not allow the author of a pattern to limit application of the pattern to chord progressions in which chord changes occurred on the first and last beats of a four-beat measure. The closest available option was to specify the "b" flag. However, this option would allow the pattern to be used with many different chord rhythms, such as those including beats on the first and second measures. Thus, it was difficult for a composer to control the application of patterns to particular chord patterns. Furthermore, an author could not specify a pattern that was applicable only to multi-measure patterns.
The invention described below addresses these issues, providing much greater flexibility than has previously been possible.